package com.dubbo.common.redis;

import java.util.Set;

/**
 * Redis服务接口类
 */
public interface RedisService {
	/**
	 * 设置键对应的值
	 * @param key 键
	 * @param value 值
	 * @return 状态码
	 */
	String set(String key, String value);
	/**
	 * 设置键对应的序列化值
	 * 
	 * @author chenwei
	 * @date 2018年2月28日 上午9:42:20
	 * @param key
	 * @param value 序列化字节码
	 * @return
	 */
	String set(String key, byte[] value) throws Exception;
	/**
	 * 设置键对应的值 (生存时间)
	 * @param key 键
	 * @param value 值
	 * @param seconds 秒数
	 * @return 状态码
	 */
	String setex(String key, String value, int seconds);
	/**
	 * 通过键获取指定的值
	 * @param key 键
	 * @return 值
	 */
	String get(String key);
	/**
	 * 通过键获取指定的值
	 * @param key 键
	 * @return 值
	 */
	@SuppressWarnings("all")
	<T> T get(final String key, final Class clazz);
	/**
	 * 根据键删除指定的值
	 * @param key 键
	 * @return 状态码
	 */
	Long del(String key);
	/**
	 * 设置键的生存时间
	 * @param key 键
	 * @param seconds 秒
	 * @return 状态码
	 */
	Long expire(String key, int seconds);
	/**
	 * 获取一个键自增长的值
	 * @param key 键
	 * @return 自增长的值
	 */
	Long incr(String key);
	/**
	 * 删除当前选定数据库的所有键
	 * @return 状态码
	 */
	String delAll();
	/**
	 * 返回当前选定数据库中的键数量
	 * @return 返回一个整数
	 */
	Long dbSize();
	/**
	 * 根据键名模糊查询所有key
	 * 
	 * @author chenwei
	 * @date 2018年2月27日 下午3:57:29
	 * @param pattern key
	 * @return 返回多个名称相近的key
	 */
	Set<String> keys(String pattern);
	/**
	 * 根据key获取字节数组
	 * 
	 * @author chenwei
	 * @date 2018年2月27日 下午5:32:41
	 * @param key
	 * @return 字节数组
	 */
	byte[] getByte(String key);
	/**
	 * 设置键对应的序列化值,和数据的生命周期
	 * 
	 * @author chenwei
	 * @date 2018年2月28日 上午10:11:50
	 * @param key 键名
	 * @param value 序列化值
	 * @param timeout 秒
	 * @throws Exception 
	 */
	String setex(String key, byte[] value, int timeout) throws Exception;
}